home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_perl.idb / usr / freeware / catman / p_man / cat3 / Data::Dumper.Z / Data::Dumper
Encoding:
Text File  |  1998-10-28  |  21.9 KB  |  661 lines

  1.  
  2.  
  3.  
  4.      DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222))))  DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333))))
  5.  
  6.  
  7.  
  8.      NNNNAAAAMMMMEEEE
  9.       Data::Dumper - stringified perl data structures, suitable
  10.       for both printing and    eval
  11.  
  12.      SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  13.           use Data::Dumper;
  14.  
  15.           #    simple procedural interface
  16.           print Dumper($foo, $bar);
  17.  
  18.           #    extended usage with names
  19.           print Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]);
  20.  
  21.           #    configuration variables
  22.           {
  23.         local $Data::Dump::Purity = 1;
  24.         eval Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]);
  25.           }
  26.  
  27.           #    OO usage
  28.           $d = Data::Dumper->new([$foo, $bar], [qw(foo *ary)]);
  29.          ...
  30.           print $d->Dump;
  31.          ...
  32.           $d->Purity(1)->Terse(1)->Deepcopy(1);
  33.           eval $d->Dump;
  34.  
  35.  
  36.      DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  37.       Given    a list of scalars or reference variables, writes out
  38.       their    contents in perl syntax. The references    can also be
  39.       objects.  The    contents of each variable is output in a
  40.       single Perl statement.  Handles self-referential structures
  41.       correctly.
  42.  
  43.       The return value can be evaled to get    back an    identical copy
  44.       of the original reference structure.
  45.  
  46.       Any references that are the same as one of those passed in
  47.       will be named    $VAR_n (where _n is a numeric suffix), and other
  48.       duplicate references to substructures    within $VAR_n will be
  49.       appropriately    labeled    using arrow notation.  You can specify
  50.       names    for individual values to be dumped if you use the
  51.       Dump() method, or you    can change the default $VAR prefix to
  52.       something else.  See $Data::Dumper::Varname and
  53.       $Data::Dumper::Terse below.
  54.  
  55.       The default output of    self-referential structures can    be
  56.       evaled, but the nested references to $VAR_n will be
  57.       undefined, since a recursive structure cannot    be constructed
  58.       using    one Perl statement.  You should    set the    Purity flag to
  59.       1 to get additional statements that will correctly fill in
  60.  
  61.  
  62.  
  63.      Page 1                        (printed 10/23/98)
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.      DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222))))  DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333))))
  71.  
  72.  
  73.  
  74.       these    references.
  75.  
  76.       In the extended usage    form, the references to    be dumped can
  77.       be given user-specified names.  If a name begins with    a *,
  78.       the output will describe the dereferenced type of the
  79.       supplied reference for hashes    and arrays, and    coderefs.
  80.       Output of names will be avoided where    possible if the    Terse
  81.       flag is set.
  82.  
  83.       In many cases, methods that are used to set the internal
  84.       state    of the object will return the object itself, so    method
  85.       calls    can be conveniently chained together.
  86.  
  87.       Several styles of output are possible, all controlled    by
  88.       setting the Indent flag.  See    the section on _C_o_n_f_i_g_u_r_a_t_i_o_n
  89.       _V_a_r_i_a_b_l_e_s _o_r _M_e_t_h_o_d_s below for details.
  90.  
  91.       MMMMeeeetttthhhhooooddddssss
  92.  
  93.       _P_A_C_K_A_G_E->new(_A_R_R_A_Y_R_E_F    [, _A_R_R_A_Y_R_E_F])
  94.           Returns a    newly created Data::Dumper object.  The    first
  95.           argument is an anonymous array of    values to be dumped.
  96.           The optional second argument is an anonymous array of
  97.           names for    the values.  The names need not    have a leading
  98.           $    sign, and must be comprised of alphanumeric
  99.           characters.  You can begin a name    with a * to specify
  100.           that the dereferenced type must be dumped    instead    of the
  101.           reference    itself,    for ARRAY and HASH references.
  102.  
  103.           The prefix specified by $Data::Dumper::Varname will be
  104.           used with    a numeric suffix if the    name for a value is
  105.           undefined.
  106.  
  107.           Data::Dumper will    catalog    all references encountered
  108.           while dumping the    values.    Cross-references (in the form
  109.           of names of substructures    in perl    syntax)    will be
  110.           inserted at all possible points, preserving any
  111.           structural interdependencies in the original set of
  112.           values.  Structure traversal is depth-first,  and
  113.           proceeds in order    from the first supplied    value to the
  114.           last.
  115.  
  116.       $_O_B_J->Dump  _o_r  _P_A_C_K_A_G_E->Dump(_A_R_R_A_Y_R_E_F [, _A_R_R_A_Y_R_E_F])
  117.           Returns the stringified form of the values stored    in the
  118.           object (preserving the order in which they were supplied
  119.           to new), subject to the configuration options below.  In
  120.           an array context,    it returns a list of strings
  121.           corresponding to the supplied values.
  122.  
  123.           The second form, for convenience,    simply calls the new
  124.           method on    its arguments before dumping the object
  125.           immediately.
  126.  
  127.  
  128.  
  129.      Page 2                        (printed 10/23/98)
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.      DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222))))  DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333))))
  137.  
  138.  
  139.  
  140.       $_O_B_J->Dumpxs    _o_r  _P_A_C_K_A_G_E->Dumpxs(_A_R_R_A_Y_R_E_F [,    _A_R_R_A_Y_R_E_F])
  141.           This method is available if you were able    to compile and
  142.           install the XSUB extension to Data::Dumper. It is
  143.           exactly identical    to the Dump method above, only about 4
  144.           to 5 times faster, since it is written entirely in C.
  145.  
  146.       $_O_B_J->Seen([_H_A_S_H_R_E_F])
  147.           Queries or adds to the internal table of already
  148.           encountered references.  You must    use Reset to
  149.           explicitly clear the table if needed.  Such references
  150.           are not dumped; instead, their names are inserted
  151.           wherever they are    encountered subsequently.  This    is
  152.           useful especially    for properly dumping subroutine
  153.           references.
  154.  
  155.           Expects a    anonymous hash of name => value    pairs.    Same
  156.           rules apply for names as in new.    If no argument is
  157.           supplied,    will return the    "seen" list of name => value
  158.           pairs, in    an array context.  Otherwise, returns the
  159.           object itself.
  160.  
  161.       $_O_B_J->Values([_A_R_R_A_Y_R_E_F])
  162.           Queries or replaces the internal array of    values that
  163.           will be dumped.  When called without arguments, returns
  164.           the values.  Otherwise, returns the object itself.
  165.  
  166.       $_O_B_J->Names([_A_R_R_A_Y_R_E_F])
  167.           Queries or replaces the internal array of    user supplied
  168.           names for    the values that    will be    dumped.     When called
  169.           without arguments, returns the names.  Otherwise,
  170.           returns the object itself.
  171.  
  172.       $_O_B_J->Reset
  173.           Clears the internal table    of "seen" references and
  174.           returns the object itself.
  175.  
  176.       FFFFuuuunnnnccccttttiiiioooonnnnssss
  177.  
  178.       Dumper(_L_I_S_T)
  179.           Returns the stringified form of the values in the    list,
  180.           subject to the configuration options below.  The values
  181.           will be named $VAR_n in the output, where _n is a numeric
  182.           suffix.  Will return a list of strings in    an array
  183.           context.
  184.  
  185.       DumperX(_L_I_S_T)
  186.           Identical    to the Dumper()    function above,    but this calls
  187.           the XSUB implementation.    Only available if you were
  188.           able to compile and install the XSUB extensions in
  189.           Data::Dumper.
  190.  
  191.  
  192.  
  193.  
  194.  
  195.      Page 3                        (printed 10/23/98)
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.      DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222))))  DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333))))
  203.  
  204.  
  205.  
  206.       CCCCoooonnnnffffiiiigggguuuurrrraaaattttiiiioooonnnn    VVVVaaaarrrriiiiaaaabbbblllleeeessss oooorrrr MMMMeeeetttthhhhooooddddssss
  207.  
  208.       Several configuration    variables can be used to control the
  209.       kind of output generated when    using the procedural
  210.       interface.  These variables are usually localized in a block
  211.       so that other    parts of the code are not affected by the
  212.       change.
  213.  
  214.       These    variables determine the    default    state of the object
  215.       created by calling the new method, but cannot    be used    to
  216.       alter    the state of the object    thereafter.  The equivalent
  217.       method names should be used instead to query or set the
  218.       internal state of the    object.
  219.  
  220.       The method forms return the object itself when called    with
  221.       arguments, so    that they can be chained together nicely.
  222.  
  223.       $Data::Dumper::Indent     _o_r  $_O_B_J->Indent([_N_E_W_V_A_L])
  224.           Controls the style of indentation.  It can be set    to 0,
  225.           1, 2 or 3.  Style    0 spews    output without any newlines,
  226.           indentation, or spaces between list items.  It is    the
  227.           most compact format possible that    can still be called
  228.           valid perl.  Style 1 outputs a readable form with
  229.           newlines but no fancy indentation    (each level in the
  230.           structure    is simply indented by a    fixed amount of
  231.           whitespace).  Style 2 (the default) outputs a very
  232.           readable form which takes    into account the length    of
  233.           hash keys    (so the    hash value lines up).  Style 3 is like
  234.           style 2, but also    annotates the elements of arrays with
  235.           their index (but the comment is on its own line, so
  236.           array output consumes twice the number of    lines).     Style
  237.           2    is the default.
  238.  
  239.       $Data::Dumper::Purity     _o_r  $_O_B_J->Purity([_N_E_W_V_A_L])
  240.           Controls the degree to which the output can be evaled to
  241.           recreate the supplied reference structures.  Setting it
  242.           to 1 will    output additional perl statements that will
  243.           correctly    recreate nested    references.  The default is 0.
  244.  
  245.       $Data::Dumper::Pad  _o_r  $_O_B_J->Pad([_N_E_W_V_A_L])
  246.           Specifies    the string that    will be    prefixed to every line
  247.           of the output.  Empty string by default.
  248.  
  249.       $Data::Dumper::Varname  _o_r  $_O_B_J->Varname([_N_E_W_V_A_L])
  250.           Contains the prefix to use for tagging variable names in
  251.           the output. The default is "VAR".
  252.  
  253.       $Data::Dumper::Useqq    _o_r  $_O_B_J->Useqq([_N_E_W_V_A_L])
  254.           When set,    enables    the use    of double quotes for
  255.           representing string values.  Whitespace other than space
  256.           will be represented as [\n\t\r], "unsafe"    characters
  257.           will be backslashed, and unprintable characters will be
  258.  
  259.  
  260.  
  261.      Page 4                        (printed 10/23/98)
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.      DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222))))  DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333))))
  269.  
  270.  
  271.  
  272.           output as    quoted octal integers.    Since setting this
  273.           variable imposes a performance penalty, the default is
  274.           0.  The Dumpxs() method does not honor this flag yet.
  275.  
  276.       $Data::Dumper::Terse    _o_r  $_O_B_J->Terse([_N_E_W_V_A_L])
  277.           When set,    Data::Dumper will emit single, non-self-
  278.           referential values as atoms/terms    rather than
  279.           statements.  This    means that the $VAR_n names will    be
  280.           avoided where possible, but be advised that such output
  281.           may not always be    parseable by eval.
  282.  
  283.       $Data::Dumper::Freezer  _o_r  $_O_B_J->Freezer([_N_E_W_V_A_L])
  284.           Can be set to a method name, or to an empty string to
  285.           disable the feature.  Data::Dumper will invoke that
  286.           method via the object before attempting to stringify it.
  287.           This method can alter the    contents of the    object (if,
  288.           for instance, it contains    data allocated from C),    and
  289.           even rebless it in a different package.  The client is
  290.           responsible for making sure the specified    method can be
  291.           called via the object, and that the object ends up
  292.           containing only perl data    types after the    method has
  293.           been called.  Defaults to    an empty string.
  294.  
  295.       $Data::Dumper::Toaster  _o_r  $_O_B_J->Toaster([_N_E_W_V_A_L])
  296.           Can be set to a method name, or to an empty string to
  297.           disable the feature.  Data::Dumper will emit a method
  298.           call for any objects that    are to be dumped using the
  299.           syntax bless(DATA, CLASS)-_M_E_T_H_O_D()>.  Note that this
  300.           means that the method specified will have    to perform any
  301.           modifications required on    the object (like creating new
  302.           state within it, and/or reblessing it in a different
  303.           package) and then    return it.  The    client is responsible
  304.           for making sure the method can be    called via the object,
  305.           and that it returns a valid object.  Defaults to an
  306.           empty string.
  307.  
  308.       $Data::Dumper::Deepcopy  _o_r  $_O_B_J->Deepcopy([_N_E_W_V_A_L])
  309.           Can be set to a boolean value to enable deep copies of
  310.           structures.  Cross-referencing will then only be done
  311.           when absolutely essential    (i.e., to break    reference
  312.           cycles).    Default    is 0.
  313.  
  314.       $Data::Dumper::Quotekeys  _o_r    $_O_B_J->Quotekeys([_N_E_W_V_A_L])
  315.           Can be set to a boolean value to control whether hash
  316.           keys are quoted.    A false    value will avoid quoting hash
  317.           keys when    it looks like a    simple string.    Default    is 1,
  318.           which will always    enclose    hash keys in quotes.
  319.  
  320.       $Data::Dumper::Bless    _o_r  $_O_B_J->Bless([_N_E_W_V_A_L])
  321.           Can be set to a string that specifies an alternative to
  322.           the bless    builtin    operator used to create    objects.  A
  323.           function with the    specified name should exist, and
  324.  
  325.  
  326.  
  327.      Page 5                        (printed 10/23/98)
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.      DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222))))  DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333))))
  335.  
  336.  
  337.  
  338.           should accept the    same arguments as the builtin.
  339.           Default is bless.
  340.  
  341.       EEEExxxxppppoooorrrrttttssss
  342.  
  343.       Dumper
  344.  
  345.      EEEEXXXXAAAAMMMMPPPPLLLLEEEESSSS
  346.       Run these code snippets to get a quick feel for the behavior
  347.       of this module.  When    you are    through    with these examples,
  348.       you may want to add or change    the various configuration
  349.       variables described above, to    see their behavior.  (See the
  350.       testsuite in the Data::Dumper    distribution for more
  351.       examples.)
  352.  
  353.           use Data::Dumper;
  354.  
  355.           package Foo;
  356.           sub new {bless {'a' => 1,    'b' => sub { return "foo" }}, $_[0]};
  357.  
  358.           package Fuz;             # a weird REF-REF-SCALAR object
  359.           sub new {bless \($_ = \ 'fu\'z'),    $_[0]};
  360.  
  361.           package main;
  362.           $foo = Foo->new;
  363.           $fuz = Fuz->new;
  364.           $boo = [ 1, [], "abcd", \*foo,
  365.                {1 => 'a', 023 => 'b', 0x45 => 'c'},
  366.                \\"p\q\'r", $foo, $fuz];
  367.  
  368.           ########
  369.           #    simple usage
  370.           ########
  371.  
  372.           $bar = eval(Dumper($boo));
  373.           print($@)    if $@;
  374.           print Dumper($boo), Dumper($bar);     # pretty print    (no array indices)
  375.  
  376.           $Data::Dumper::Terse = 1;         # don't output    names where feasible
  377.           $Data::Dumper::Indent = 0;     # turn    off all    pretty print
  378.           print Dumper($boo), "\n";
  379.  
  380.           $Data::Dumper::Indent = 1;     # mild    pretty print
  381.           print Dumper($boo);
  382.  
  383.           $Data::Dumper::Indent = 3;     # pretty print    with array indices
  384.           print Dumper($boo);
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.      Page 6                        (printed 10/23/98)
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.      DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222))))  DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333))))
  401.  
  402.  
  403.  
  404.           $Data::Dumper::Useqq = 1;         # print strings in double quotes
  405.           print Dumper($boo);
  406.  
  407.  
  408.           ########
  409.           #    recursive structures
  410.           ########
  411.  
  412.           @c = ('c');
  413.           $c = \@c;
  414.           $b = {};
  415.           $a = [1, $b, $c];
  416.           $b->{a} =    $a;
  417.           $b->{b} =    $a->[1];
  418.           $b->{c} =    $a->[2];
  419.           print Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]);
  420.  
  421.  
  422.           $Data::Dumper::Purity = 1;     # fill    in the holes for eval
  423.           print Data::Dumper->Dump([$a, $b], [qw(*a    b)]); #    print as @a
  424.           print Data::Dumper->Dump([$b, $a], [qw(*b    a)]); #    print as %b
  425.  
  426.  
  427.           $Data::Dumper::Deepcopy =    1;     # avoid cross-refs
  428.           print Data::Dumper->Dump([$b, $a], [qw(*b    a)]);
  429.  
  430.  
  431.           $Data::Dumper::Purity = 0;     # avoid cross-refs
  432.           print Data::Dumper->Dump([$b, $a], [qw(*b    a)]);
  433.  
  434.  
  435.           ########
  436.           #    object-oriented    usage
  437.           ########
  438.  
  439.           $d = Data::Dumper->new([$a,$b], [qw(a b)]);
  440.           $d->Seen({'*c' =>    $c});         # stash a ref without printing    it
  441.           $d->Indent(3);
  442.           print $d->Dump;
  443.           $d->Reset->Purity(0);         # empty the seen cache
  444.           print join "----\n", $d->Dump;
  445.  
  446.  
  447.           ########
  448.           #    persistence
  449.           ########
  450.  
  451.           package Foo;
  452.           sub new {    bless {    state => 'awake' }, shift }
  453.           sub Freeze {
  454.           my $s    = shift;
  455.           print    STDERR "preparing to sleep\n";
  456.  
  457.  
  458.  
  459.      Page 7                        (printed 10/23/98)
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.      DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222))))  DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333))))
  467.  
  468.  
  469.  
  470.           $s->{state} =    'asleep';
  471.           return bless $s, 'Foo::ZZZ';
  472.           }
  473.  
  474.           package Foo::ZZZ;
  475.           sub Thaw {
  476.           my $s    = shift;
  477.           print    STDERR "waking up\n";
  478.           $s->{state} =    'awake';
  479.           return bless $s, 'Foo';
  480.           }
  481.  
  482.           package Foo;
  483.           use Data::Dumper;
  484.           $a = Foo->new;
  485.           $b = Data::Dumper->new([$a], ['c']);
  486.           $b->Freezer('Freeze');
  487.           $b->Toaster('Thaw');
  488.           $c = $b->Dump;
  489.           print $c;
  490.           $d = eval    $c;
  491.           print Data::Dumper->Dump([$d], ['d']);
  492.  
  493.  
  494.           ########
  495.           #    symbol substitution (useful for    recreating CODE    refs)
  496.           ########
  497.  
  498.           sub foo {    print "foo speaking\n" }
  499.           *other = \&foo;
  500.           $bar = [ \&other ];
  501.           $d = Data::Dumper->new([\&other,$bar],['*other','bar']);
  502.           $d->Seen({ '*foo'    => \&foo });
  503.           print $d->Dump;
  504.  
  505.  
  506.      BBBBUUUUGGGGSSSS
  507.       Due to limitations of    Perl subroutine    call semantics,    you
  508.       cannot pass an array or hash.     Prepend it with a \ to    pass
  509.       its reference    instead.  This will be remedied    in time, with
  510.       the arrival of prototypes in later versions of Perl.    For
  511.       now, you need    to use the extended usage form,    and prepend
  512.       the name with    a * to output it as a hash or array.
  513.  
  514.       Data::Dumper cheats with CODE    references.  If    a code
  515.       reference is encountered in the structure being processed,
  516.       an anonymous subroutine that contains    the string '"DUMMY"'
  517.       will be inserted in its place, and a warning will be printed
  518.       if Purity is set.  You can eval the result, but bear in mind
  519.       that the anonymous sub that gets created is just a
  520.       placeholder.    Someday, perl will have    a switch to cache-on-
  521.       demand the string representation of a    compiled piece of
  522.  
  523.  
  524.  
  525.      Page 8                        (printed 10/23/98)
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.      DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222))))  DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333))))
  533.  
  534.  
  535.  
  536.       code,    I hope.     If you    have prior knowledge of    all the    code
  537.       refs that your data structures are likely to have, you can
  538.       use the Seen method to pre-seed the internal reference table
  539.       and make the dumped output point to them, instead.  See the
  540.       _E_X_A_M_P_L_E_S manpage above.
  541.  
  542.       The Useqq flag is not    honored    by Dumpxs() (it    always outputs
  543.       strings in single quotes).
  544.  
  545.       SCALAR objects have the weirdest looking bless workaround.
  546.  
  547.      AAAAUUUUTTTTHHHHOOOORRRR
  548.       Gurusamy Sarathy      gsar@umich.edu
  549.  
  550.       Copyright (c)    1996-98    Gurusamy Sarathy. All rights reserved.
  551.       This program is free software; you can redistribute it
  552.       and/or modify    it under the same terms    as Perl    itself.
  553.  
  554.      VVVVEEEERRRRSSSSIIIIOOOONNNN
  555.       Version 2.09      (9 July 1998)
  556.  
  557.      SSSSEEEEEEEE AAAALLLLSSSSOOOO
  558.       _p_e_r_l(1)
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.      Page 9                        (printed 10/23/98)
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.      DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222))))  DDDDaaaattttaaaa::::::::DDDDuuuummmmppppeeeerrrr((((3333))))
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.      Page 10                        (printed 10/23/98)
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.